home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / scsh-0.4 / scsh-0 / scsh-0.4.2 / scsh / db.scm < prev    next >
Text File  |  1995-10-13  |  3KB  |  94 lines

  1. ;;; Very vanilla DBM processing code
  2.  
  3. ;;; Copyright (c) 1995 by David Albertz (dalbertz@clark.lcs.mit.edu).
  4.  
  5. ;;; This code is freely available for use by anyone for any purpose,
  6. ;;; so long as you don't charge money for it, remove this notice, or
  7. ;;; hold us liable for any results of its use.  --enjoy.
  8.  
  9. ;;; This is just a straight translation of the UNIX freebie NDBM code.
  10.  
  11. ;;; Usage:    (db-open name flags mode type info)
  12. ;;;                 name  := name of database file (no extension)
  13. ;;;                 flags := file access flags (open/create etc.)
  14. ;;;                 mode  := file access modes (privileges)
  15. ;;;                 type  := DBTYPE as defined in db.h (btree, hash, recno)
  16. ;;;                 info  := access method specific structure
  17. ;;;                          (NULL gives defaults)
  18.  
  19. ;;; Return:    Alien value pointer to the open DBM structure
  20.  
  21. ;;; Usage:      (dbm-close db)
  22. ;;;                 db := The pointer returned by dbm-open
  23.  
  24. ;;; Return:     Always returns 0
  25.  
  26. ;;; Usage:      (dbm-fetch db key)
  27.  
  28. ;;;                 db  := The pointer returned by dbm-open
  29. ;;;                 key := The key value of data to be retrieved
  30.  
  31. ;;; Return:     String containing data associated with key
  32.  
  33. ;;; Usage:      (dbm-store db key data flag)
  34. ;;;                 db   := The pointer returned by dbm-open
  35. ;;;                 key  := The key value to be associated with data
  36. ;;;                 data := The data to be stored with the key
  37. ;;;                 flag := 0 for insert, 1 for replace
  38.  
  39. ;;; Return:     Integer returned by UNIX dbm_store routine
  40.  
  41. ;;; Usage:      (dbm-delete db key)
  42. ;;;                 db  := The pointer returned by dbm-open
  43. ;;;                 key := The key value of data to be deleted
  44.  
  45. ;;; Return:     Integer returned by UNIX dbm_delete routine
  46.  
  47. ;;; Usage:      (dbm-firstkey db)
  48. ;;;                 db   := The pointer returned by dbm-open
  49.  
  50. ;;; Return:     First key value stored in database hash table.
  51.  
  52. ;;; Usage:      (dbm-nextkey db)
  53. ;;;                 db   := The pointer returned by dbm-open
  54.  
  55. ;;; Return:     Next key value stored in database hash table.
  56.  
  57. ;;; Usage:      (dbm-error db)
  58. ;;;                 db   := The pointer returned by dbm-open
  59.  
  60. ;;; Return:     Error number returned by UNIX dbm_error routine
  61.  
  62. ;;; Usage:      (dbm-clearerr db)
  63. ;;;                 db   := The pointer returned by dbm-open
  64.  
  65. ;;; Return:     Clears any database error condition and returns the 
  66. ;;;             integer from the UNIX dbm_clearerr routine
  67.  
  68. ;;; ***NOTE:  All key and data elements must be strings
  69.  
  70. ;;; Scheme48 implementation.
  71.  
  72. (foreign-source
  73.   "#include <sys/types.h>"
  74.   "#include <limits.h>"
  75.   "#include \"/usr/local/include/db.h\""
  76.   ""
  77.   "extern int errno;"
  78.   ""
  79.   "#define errno_or_false(x) (((x) == -1) ? ENTER_FIXNUM(errno) : SCHFALSE)"
  80.   "" "")
  81.  
  82. (define-foreign %db-open (db_open (string file)
  83.                   (integer flags)
  84.                   (integer mode)
  85.                   (integer type))
  86.   (to-scheme integer errno_or_false) ; error flag
  87.   (C DB**)) ; DBM structure
  88.  
  89. (define (db-open file flags mode type)
  90.   (receive (err dbm) (%db-open file flags mode type)
  91.        (if err
  92.            (errno-error err db-open)
  93.            dbm)))
  94.